package com.wgzx.modbus.entity.response;

import com.wgzx.modbus.constant.FunctionCode;
import com.wgzx.modbus.entity.ModbusRsp;
import io.netty.buffer.ByteBuf;
import lombok.Getter;

/**
 * 请求报文：<br/>
 * 功能码：1个字节 写多个个线圈 0x0F <br/>
 * 起始地址：2个字节 0x0000至0xFFFF <br/>
 * 输出数量：2个字节 0x0001至0x07B0 <br/>
 * 字节数：1个字节 N <br/>
 * 输出值：N个字节 <br/>
 *
 * 响应报文：<br/>
 * 功能码：1个字节 0x0F <br/>
 * 起始地址：2个字节 0x0000至0xFFFF <br/>
 * 输出数量：2个字节 0x0001至0x07B0 <br/>
 *
 * 错误响应：<br/>
 * 差错码：1个字节0x8F <br/>
 * 异常码：1个字节01或02或03或04 <br/>
 *
 * 示例报文：<br/>
 * Rx:00 01(事务) 00 00(协议标识) 00 09(长度) FF(单元标识) 0F(功能码) 00 00(偏移量) 00 0A(设置bit数量，这里为10，表示设置10个bit位) 02(后面字节数) 21 01(bit值) <br/>
 * Tx:00 01(事务) 00 00(协议标识) 00 06(长度) FF(单元标识) 0F(功能码) 00 00(偏移量) 00 0A(输出数量，也就是修改的bit数量) <br/>
 *
 * @author gexin
 */
@Getter
public class WriteMultipleCoilsResponse extends ModbusRsp {

    private int address;
    private int value;

    public WriteMultipleCoilsResponse(FunctionCode functionCode) {
        super(functionCode);
    }

    @Override
    public String toString() {
        return "WriteMultipleCoilsResponse{" + "startingAddress=" + address + ", quantityOfOutputs=" + value + '}';
    }

    @Override
    public void decode(ByteBuf buffer) {
        address = buffer.readUnsignedShort();
        value = buffer.readUnsignedShort();
    }
}
